#创建集合set,set()用来创建集合的函数，type()用来查看数据类型
#1.可以使用大括号进行创建
s = {1, 2, 3, 4}
#2.使用set()函数来进行创建
ss = set("1234")
print(type(s))
print(type(ss))

#集合的添加与删除
#添加元素
s.add(6)
print(s)
#删除一个元素
s.pop()
print(s)
#删除集合中的元素
s.remove(4)
print(s)

#创建元组
#创建空元组
tuple1 = ()
print(tuple1)
#创建带有元素的元组,可以有元素类型
tuple2 = (1, "a", 3, "hello", 2.2)
print(tuple2)
#创建只有一个元素的元组
tuple3 = (1,)
print(type(tuple3))

#使用tuple()函数将其他数据类型转换为元组类型
#语法格式：tuple(数据）
#将字符串转换成元组
list1 = tuple("hello,world")
print(tuple1)
#将列表转为元组
list1 = ["Python", "Java", "C++", "C"]
tuple2 = tuple(list1)
print(tuple2)

#从开始索引开始截取，截止到结束索引之前
tuple1 = ("h", "e", "l", "l", "o")
#使用索引中某个元素
#用正数索引，从0开始
print(tuple1[2])
#用负数索引，倒序从-1开始
print(tuple1[-4])
#使用切片访问元组中一个元素，前闭后开
#适用正数切片
print(tuple1[1: 4])
#指定步长
print(tuple1[1: 4: 2])
#使用负数切片
print(tuple1[-5: -1])

# 修改元组元素
tuple1 = (12, 34, 56)
tuple2 = ("abc", "mn")
# 修改元组元素操作是非法的
# tuple1[0] = 100
# tuple2[0] = 200
# 连接元组创建一个新的元组，两个数据必须都是元组
tuple3 = tuple1 + tuple2
print(tuple3)
# 删除
del (tuple1)

# 任务
name = input("输入姓名")
telephone = input("输入电话号码")
email = input("输入邮件")
address = input("输入地址")
tuple1 = ("姓名：", name, "电话：", telephone, "邮箱：", email, "地址：", address)
print(tuple1)

# 创建列表
# 1.用[]直接创建
list1 = [1, "hello", 2, "C语言"]
print(list1)
print(type(list1))
# 创建空列表
list2 = []
print(list2)
# 2.用list（）函数转化为其他列表
# 1转化字符串
l3 = list("hello")
print(l3)
# 2转化元组
t1 = tuple("hello")
l4 = list(t1)
print(l4)
# 3转化range函数
r1 = range(5)
print(r1)
l5 = list(r1)
print(l5)

# 访问列表中的元素
l1 = [1, 2, 3, "8", "p", "u"]
# 使用正数索引进行访问，访问p
print(l1[-2])

# 使用切片访问列表中的元素
l2 = ["p", "u", "w", "r", 1, 5, 7]
# 正向取值
# 使用切片索引2,3,4的元素
print(l2[2:5])
# 正切片取前三个元素
print(l2[:3])
# 正切片取出后三个元素
print(l2[4:])
# 使用正切片，索引1-5的元素，步长2
print(l2[1:6:2])
# 负向取值
# 使用负切片形式取出u,w,r
print(l2[-6:-3])
# 步长为负数的话，取值从左到右，常用在排序上边，，倒序形式
print(l2[::-1])
l3 = [10, 8, 6, 5, 2, 1]
print(l3[::-1])

#遍历列表
#利用for循环遍历列表
l3 = [1, 2, 3, 4, 5, 6, 7]
for i in l3:
    print(i)

#修改列表元素
#修改单个元素
l4 = [10, 56, 34, 2, 56, 44, 7]
#将索引为2的元素值修改为100
l4[2] = 100
print(l4)

#修改多个元素
l5 = [10, 56, 34, 2, 56, 44, 7]
#修改第1-4个元素的值（不包括第4个元素）
l5[1:4] = [45, -56, 98]
print(l5)

#列表中添加元素
#1.append（）用于在列表的末尾追加元素
l6 = ["a", "b", "c"]
l6.append("f")
print(l6)
#列表添加列表
l6.append(["e", "f"])
print(l6)

#2.extend()在列表的末尾一次添加多个元素
l7 = ["a", "b", "c"]
l7.extend("d")
print(l7)
#列表添加列表
l7.extend(["e", "f", "g", "h"])
print(l7)
l7.extend("world")
print(l7)

#3.insert()在列表的特定位置添加
l8 = ["python", "C", "java"]
#插入元素
l8.insert(2, "go")
#l8.insert(1,"c++")
print(l8)

#删除元素
l15 = ["a", "b", "c", "d"]
l15.remove("a")
print(l15)
#如果元祖不再会报错 例如l15.remove("f")会报错

#pop()删除
l16 = [1, 2, 3, 4, 10, 15, 16]
#删除索引为3的元素
l16.pop(3)
print(l16)
#删除最后一个元素
l16.pop()
print(l16)

#del可以来删除列表中单个或一段连续的元素
l17 = ["a", "b", "c", "d", "e"]
#删除索引为1的元素
del l17[1]
print(l17)
l18 = [10, 11, 14, 15, 25, 44, 26]
#删除索引1-3的元素
del l18[1:4]
print(l18)

#若将列表中所有元素删除，用clear（）删除
l19 = ["a", "b", "c", "d"]
#清空列表
l19.clear()
print(l19)

#任务
#创建空列表
name_list = []
phone_list = []
while 1:
    print("菜单：1.添加联系人 2.修改联系人 3.删除联系人")
    chioce = input("请输入联系人姓名")
    #1.添加联系人，包括姓名，手机号
    if chioce == "1":
        name_list.append(input("输入联系人姓名："))
        phone_list.append(input("输入联系人手机号："))
        print(name_list)
        print(phone_list)
    #2.修改联系人信息
    elif chioce == "2":
        num = int(input("输入联系人编号："))
        if len(name_list) > 0 and num <= len(name_list):
            name_list[num - 1] = input("修改联系人姓名")
            phone_list[num - 1] = input("修改联系电话")
        else:
            print("联系人编号输入有误")
    #3.删除联系人信息
    elif chioce == "3":
        num = int(input("输入联系人编号："))
        if len(name_list) > 0 and num <= len(name_list):
            name_list.pop(num-1)
            phone_list.pop(num - 1)
        else:
            print("显示联系人信息")
            print(name_list)
            print(phone_list)

#查找元素index（）列表名.index[查找的元素，索引起始位置，索引结束位置]
ls1 = [1, 3, 5, 7, "a", "b", 8, 3, "b", 2]
print(ls1.index(3))
print(ls1.index('b', 6, 9))
print(ls1.index("a", 3))
# print(ls1.index(12))

#count()方法用来统计某个元素在列表总的次数 列表名.count(统计的value元素)
ls2 = [1, 3, 5, 7, "a", "b", 8, 3, "b", 2, 5, 5, 7, 1]
print(ls2.count(5))
print(ls2.count(0))
print(ls2.count("b"))

#元素sort()函数用于对原列表进行排列，如果指定参数，则使用指定的比较函数
#1.元素是字符串的排序
ls3 = ["1", "3", "44", "23", "99", "88", "56", "233"]
#默认升序
ls3.sort()
print(ls3)
#降序
ls3.sort(reverse=True)
print(ls3)

#2.元素数值排序
ls3 = [1, 3, 44, 23, 99, 88, 56, 233]
#默认升序
ls3.sort()
print(ls3)
#降序
ls3.sort(reverse=True)
print(ls3)

#创建字典
#1.使用{}创建
#使用字符串作为key
d1 = {"python":90, "可视化":89, "英语":85}
print(type(d1))
#使用元组和数字作为key
d2 = {(23, 89):"great", 30:[1, 3, 4]}
print(type(d2))
#创建空元祖
d3 = {}
print(d3)

#2.用dict()方法通过关键字的参数来创建
d4 = dict(数学=98, 语文=87, 英语=89)
print(d4)

#字典的访问
#1.字典名[key]
d5 = {"数学": 95, "英语": 92, "语文": 84}
#键存在，返回的是值
print(d5["英语"])
#键不存在，会引发keyerror错误
#print(d5["python"])
#2.get()方法来获取指定键对应的值，格式：字典名。get（key[,defalt])
d6 = {"数学": 95, "英语": 92, "语文": 84}
#键存在
print(d6.get("语文"))
#键存在，不写default,会返回none
print(d6.get("python"))
print(d6.get("python", "该键不存在"))

#字典添加键值对
d7 = {"数学": 95, "英语": 92, "语文": 84, "python": 99}
d7["可视化"] = 99
print(d7)

#字典修改
d8 = {"数学": 95, "英语": 92, "语文": 84, "python": 99}
d8["英语"] = 100
print(d8)

#字典删除
d9 = {"数学": 95, "英语": 92, "语文": 84, "python": 99}
#1.使用关键字del
del d9["语文"]
print(d9)
#2.使用pop()
d9.pop("英语")
print(d9)